Operating systems and applications executing within operating systems frequently make use of external hardware devices to allow users to provide input to the program and to provide output to users. Common examples of external hardware devices include a keyboard, a computer mouse, a microphone, and external speakers. These external hardware devices interface with the operating system through the use of drivers, which are specialized software programs configured to interface between the hardware commands used by a particular hardware device and the operating system.
Applications will sometimes be designed to interface with certain hardware devices. For example, a voice-to-text word processing application can be designed to interface with an audio headset including a microphone. In this case, the application must be specifically configured to receive voice commands, perform voice recognition, convert the recognized words into textual content, and output the textual content into a document. This functionality will typically be embodied in the application's Application Programming Interface (API), which is a set of defined methods of communication between various software components. In the example of the voice recognition application, the API can include an interface between the application program and software on a driver that is responsible for interfacing with the hardware device (the microphone) itself.
One problem with existing software that makes use of specialized hardware devices is that the application or operating system software itself must be customized and specially designed in order to utilize the hardware device. This customization means that the hardware device cannot exceed the scope defined for it by the application and cannot be utilized for contexts outside the specific application for which it was designed to be used. For example, a user of the voice-to-text word processing application could not manipulate other application programs or other components within the operating system using voice commands unless those other application programs or the operating system were specifically designed to make use of voice commands received over the microphone.
FIG. 1 illustrates an example of the existing architecture of systems which make use of coupled hardware devices for user input. The operating system 100A of FIG. 1 includes executing applications 101A and 102A, each of which have their own APIs, 101B and 102B, respectively. The operating system 100A also has its own API 100B, as well as specialized drivers 100C, 101C, and 102C, configured to interface with hardware devices 100D, 101D, and 102D.
As shown in FIG. 1, application API 101B is configured to interface with driver 101C which itself interfaces with hardware device 101D. Similarly, application API 102B is configured to interface with driver 102C which itself interfaces with hardware device 102D. At the operating system level, the operating system API 100B is configured to interface with driver 100C, which itself interfaces with hardware device 100D.
The architecture of the system shown in FIG. 1 limits the ability of users to utilize hardware devices outside of certain application or operating system contexts. For example, a user could not utilize hardware device 101D to provide input to application 102A and could not utilize hardware device 102D to provide input to application 101A or to the operating system 100A.
Accordingly, improvements are needed in hardware-software interfaces which allow for utilization of hardware devices in multiple software contexts.